/**
 * 应急救援相关API接口
 * 为后期连接后端接口做准备
 */

// 模拟API基础配置
const API_BASE_URL = 'https://api.example.com';

// 模拟API请求方法
const request = (url, options = {}) => {
  return new Promise((resolve, reject) => {
    // 这里后期会替换为真实的网络请求
    // 例如使用 uni.request 或 axios
    setTimeout(() => {
      resolve({
        code: 200,
        data: {},
        message: 'success'
      });
    }, 1000);
  });
};

/**
 * 应急救援API接口
 */
export const emergencyAPI = {
  /**
   * 提交救援请求
   * @param {Object} data - 救援请求数据
   * @param {string} data.serviceType - 救援类型：jump(搭电), tire(换胎), tow(拖车)
   * @param {string} data.location - 当前位置
   * @param {string} data.requester - 求助人姓名
   * @param {string} data.contact - 联系方式
   * @param {number} data.vehicleId - 车型ID
   * @param {string} data.plateNumber - 车牌号
   * @param {Object} data.vehicleInfo - 车型信息
   * @param {string} data.description - 问题描述
   * @param {string} data.startPoint - 起点（仅拖车服务）
   * @param {string} data.endPoint - 终点（仅拖车服务）
   * @returns {Promise} 返回提交结果
   */
  submitRescueRequest(data) {
    // 验证必填字段
    const requiredFields = ['serviceType', 'location', 'requester', 'contact', 'vehicleId', 'description'];
    for (const field of requiredFields) {
      if (!data[field]) {
        return Promise.reject(new Error(`缺少必填字段: ${field}`));
      }
    }
    
    // 如果是拖车服务，验证起点和终点
    if (data.serviceType === 'tow') {
      if (!data.startPoint || !data.endPoint) {
        return Promise.reject(new Error('拖车服务需要填写起点和终点'));
      }
    }
    
    // 后期会替换为真实的API调用
    // return request(`${API_BASE_URL}/emergency/rescue`, {
    //   method: 'POST',
    //   data: data
    // });
    
    // 模拟返回数据结构
    return Promise.resolve({
      code: 200,
      data: {
        rescueId: 'RESCUE_' + Date.now(),
        status: 'pending',
        estimatedTime: '30分钟',
        message: '救援请求已提交，工作人员将在30分钟内联系您'
      },
      message: 'success'
    });
  },

  /**
   * 获取用户车型列表
   * @param {number} userId - 用户ID
   * @returns {Promise} 返回用户车型列表
   */
  getUserVehicles(userId) {
    if (!userId) {
      return Promise.reject(new Error('缺少用户ID'));
    }
    
    // 后期会替换为真实的API调用
    // return request(`${API_BASE_URL}/user/${userId}/vehicles`, {
    //   method: 'GET'
    // });
    
    // 模拟返回数据结构
    return Promise.resolve({
      code: 200,
      data: [
        {
          id: 1,
          brand: '大众',
          model: '朗逸',
          plateNumber: '豫CJ4321',
          year: '2020',
          color: '白色',
          engineNumber: 'ABC123456',
          vin: 'VIN123456789',
          displayText: '大众 朗逸 2020 (豫CJ4321)'
        },
        {
          id: 2,
          brand: '丰田',
          model: '卡罗拉',
          plateNumber: '豫A12345',
          year: '2019',
          color: '黑色',
          engineNumber: 'DEF789012',
          vin: 'VIN987654321',
          displayText: '丰田 卡罗拉 2019 (豫A12345)'
        }
      ],
      message: 'success'
    });
  },

  /**
   * 获取救援记录列表
   * @param {Object} params - 查询参数
   * @param {number} params.page - 页码
   * @param {number} params.pageSize - 每页数量
   * @param {string} params.status - 状态筛选
   * @returns {Promise} 返回救援记录列表
   */
  getRescueRecords(params = {}) {
    const { page = 1, pageSize = 10, status = '' } = params;
    
    // 后期会替换为真实的API调用
    // return request(`${API_BASE_URL}/emergency/records`, {
    //   method: 'GET',
    //   data: { page, pageSize, status }
    // });
    
    // 模拟返回数据结构
    return Promise.resolve({
      code: 200,
      data: {
        list: [],
        total: 0,
        page,
        pageSize,
        hasMore: false
      },
      message: 'success'
    });
  },

  /**
   * 获取救援记录详情
   * @param {string} rescueId - 救援记录ID
   * @returns {Promise} 返回救援记录详情
   */
  getRescueRecordDetail(rescueId) {
    if (!rescueId) {
      return Promise.reject(new Error('缺少救援记录ID'));
    }
    
    // 后期会替换为真实的API调用
    // return request(`${API_BASE_URL}/emergency/records/${rescueId}`, {
    //   method: 'GET'
    // });
    
    // 模拟返回数据结构
    return Promise.resolve({
      code: 200,
      data: {
        id: rescueId,
        serviceType: 'jump',
        status: 'completed',
        location: '河南省焦作市山阳区32号',
        requester: '张先生',
        contact: '15523632541',
        vehicleInfo: {
          brand: '大众',
          model: '朗逸',
          plateNumber: '豫CJ4321'
        },
        description: '车辆无法启动，需要搭电服务',
        createTime: '2023-03-10 10:30:00',
        updateTime: '2023-03-10 11:00:00',
        estimatedTime: '30分钟',
        actualTime: '25分钟',
        technician: {
          name: '李师傅',
          phone: '13800138000',
          rating: 4.8
        }
      },
      message: 'success'
    });
  },

  /**
   * 取消救援请求
   * @param {string} rescueId - 救援记录ID
   * @returns {Promise} 返回取消结果
   */
  cancelRescueRequest(rescueId) {
    if (!rescueId) {
      return Promise.reject(new Error('缺少救援记录ID'));
    }
    
    // 后期会替换为真实的API调用
    // return request(`${API_BASE_URL}/emergency/rescue/${rescueId}/cancel`, {
    //   method: 'POST'
    // });
    
    // 模拟返回数据结构
    return Promise.resolve({
      code: 200,
      data: {
        rescueId,
        status: 'cancelled'
      },
      message: '救援请求已取消'
    });
  },

  /**
   * 评价救援服务
   * @param {Object} data - 评价数据
   * @param {string} data.rescueId - 救援记录ID
   * @param {number} data.rating - 评分（1-5）
   * @param {string} data.comment - 评价内容
   * @returns {Promise} 返回评价结果
   */
  rateRescueService(data) {
    const { rescueId, rating, comment } = data;
    
    if (!rescueId || !rating) {
      return Promise.reject(new Error('缺少必填字段'));
    }
    
    if (rating < 1 || rating > 5) {
      return Promise.reject(new Error('评分必须在1-5之间'));
    }
    
    // 后期会替换为真实的API调用
    // return request(`${API_BASE_URL}/emergency/rescue/${rescueId}/rate`, {
    //   method: 'POST',
    //   data: { rating, comment }
    // });
    
    // 模拟返回数据结构
    return Promise.resolve({
      code: 200,
      data: {
        rescueId,
        rating,
        comment
      },
      message: '评价提交成功'
    });
  }
};

/**
 * 数据模型定义
 * 为后期接口对接提供数据结构参考
 */
export const dataModels = {
  /**
   * 救援请求数据结构
   */
  rescueRequest: {
    serviceType: 'string',      // 救援类型：jump(搭电), tire(换胎), tow(拖车)
    location: 'string',         // 当前位置
    requester: 'string',        // 求助人姓名
    contact: 'string',          // 联系方式
    vehicleId: 'number',        // 车型ID
    plateNumber: 'string',      // 车牌号
    vehicleInfo: 'object',      // 车型信息
    description: 'string',      // 问题描述
    startPoint: 'string',       // 起点（仅拖车服务）
    endPoint: 'string',         // 终点（仅拖车服务）
    timestamp: 'string',        // 提交时间
    status: 'string'            // 救援状态：pending(待处理), processing(处理中), completed(已完成), cancelled(已取消)
  },

  /**
   * 车型数据结构
   */
  vehicle: {
    id: 'number',               // 车型ID
    brand: 'string',            // 品牌
    model: 'string',            // 型号
    plateNumber: 'string',      // 车牌号
    year: 'string',             // 年份
    color: 'string',            // 颜色
    engineNumber: 'string',     // 发动机号
    vin: 'string',              // 车架号
    displayText: 'string'       // 显示文本
  },

  /**
   * 救援记录数据结构
   */
  rescueRecord: {
    id: 'string',               // 救援记录ID
    serviceType: 'string',      // 救援类型
    status: 'string',           // 救援状态
    location: 'string',         // 位置
    requester: 'string',        // 求助人
    contact: 'string',          // 联系方式
    vehicleInfo: 'object',      // 车型信息
    description: 'string',      // 问题描述
    startPoint: 'string',       // 起点
    endPoint: 'string',         // 终点
    createTime: 'string',       // 创建时间
    updateTime: 'string',       // 更新时间
    estimatedTime: 'string',    // 预计时间
    actualTime: 'string',       // 实际时间
    technician: 'object',       // 技师信息
    rating: 'number',           // 评分
    comment: 'string'           // 评价内容
  }
};

/**
 * 错误码定义
 * 为后期错误处理提供参考
 */
export const errorCodes = {
  SUCCESS: 200,                    // 成功
  INVALID_PARAMS: 400,             // 参数错误
  UNAUTHORIZED: 401,               // 未授权
  FORBIDDEN: 403,                  // 禁止访问
  NOT_FOUND: 404,                  // 资源不存在
  INTERNAL_ERROR: 500,             // 服务器内部错误
  RESCUE_REQUEST_FAILED: 1001,     // 救援请求失败
  VEHICLE_NOT_FOUND: 1002,         // 车型不存在
  RESCUE_RECORD_NOT_FOUND: 1003,   // 救援记录不存在
  RESCUE_ALREADY_CANCELLED: 1004,  // 救援已取消
  INVALID_RATING: 1005             // 无效评分
};

export default emergencyAPI;
